using MediatR;
using System;
using Work.ErrorCode;

namespace Work.API.Applications.Write.Commands
{
    /// <summary>
    /// 药品出库命令（用于药品出库模块）
    /// 用于从库存中扣除药品（发药给患者）
    /// </summary>
    public class OutboundDrugCommand : IRequest<ApiResult<int>>
    {
        /// <summary>
        /// 药品ID（必填）
        /// </summary>
        public int DrugId { get; set; }

        /// <summary>
        /// 处方明细ID（可选，用于追溯出库药品来自哪个处方）
        /// </summary>
        public int? PrescriptionItemId { get; set; }

        /// <summary>
        /// 预约编号（可选，用于追溯）
        /// </summary>
        public int? AppointmentId { get; set; }

        /// <summary>
        /// 患者ID（必填）
        /// </summary>
        public int PatientId { get; set; }

        /// <summary>
        /// 卡号（冗余字段，便于快速查询）
        /// </summary>
        public string? CardNumber { get; set; }

        /// <summary>
        /// 挂号编号（冗余字段，便于快速查询）
        /// </summary>
        public string? RegistrationNum { get; set; }

        /// <summary>
        /// 患者姓名（冗余字段，便于快速查询）
        /// </summary>
        public string? PatientName { get; set; }

        /// <summary>
        /// 出库数量（必填）
        /// </summary>
        public int Quantity { get; set; }

        /// <summary>
        /// 出库单价（销售价格，通常使用药品的售价）
        /// </summary>
        public decimal UnitPrice { get; set; }

        /// <summary>
        /// 操作人（执行出库操作的人员）
        /// </summary>
        public string? Operator { get; set; }

        /// <summary>
        /// 备注
        /// </summary>
        public string? Remarks { get; set; }
    }
}

